﻿/////////////////////////////////////////////////////////////////////////////////
//
// InstantCube
// - Automatically generates Analysis Services cubes
// (C) Copyright Johan Åhlén 2009
// 
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// any later version.
// 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
// See the GNU General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see http://www.gnu.org/licenses/.
//
// More info on InstantCube website: http://instantcube.codeplex.com
//
/////////////////////////////////////////////////////////////////////////////////


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;

namespace AdvantIQ.InstantCube.Model
{
    public class Hierarchy
    {
        public List<string> Attributes { get; set; }
        public string Description { get; set; }
        public bool IsParentChildHierarchy { get; set; }

        public string GetParentKey()
        {
            if (!IsParentChildHierarchy)
                return string.Empty;

            return Attributes[0];
        }

        public Hierarchy(IEnumerable<string> attributes, string description)
        {
            Attributes = attributes.ToList();
            Description = description;
        }

        public Hierarchy(XElement srcNode)
        {
            try
            {
                Attributes = srcNode.Elements("hierarchyLevel").Select(e => e.Attribute("attribute").Value).ToList();
                Description = srcNode.Attribute("id").Value;
            }
            catch (ModelErrorException ex)
            {
                throw new ModelErrorException(this, ex);
            }
            catch (Exception ex)
            {
                throw new ModelErrorException(this, ex.Message);
            }
        }

        public override string ToString()
        {
            if (Description != null)
                return string.Format("Hierarchy({0})", Description);
            else
                return "Hierarchy";
        }
    }
}
